package com.snack.common.core.utils.dif;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DifUtils {

    /**
     * @param rps1  rps1数据
     * @param rps2  rps2数据
     * @return  0:rps1中独有的数据;1:交集的数据;2:rps2中的独有数据
     */
    public static<T> Map<Integer, List<T>> findListDiff(List<T> rps1, List<T> rps2){
        //判断不能为空
        if(rps1 == null || rps1.isEmpty() || rps2 == null || rps1.isEmpty()) {
            return null;
        }
        //保存最后的数据
        Map<Integer, List<T>>  mapList = new HashMap<Integer, List<T>>(3);

        //复制rps1，作为备份
        List<T> rps1_bak = new ArrayList<T>(rps1);

        //1、获取rps1中与rps2中不同的元素
        rps1.removeAll(rps2);

        //2、获取rps1和rps2中相同的元素
        rps1_bak.removeAll(rps1);

        //3、获取rps2中与rps1中不同的元素
        rps2.removeAll(rps1_bak);

        //经过此转换后rps1中数据与rps2中的数据完全不同
        //rps1_bak是rps1和rps2的交集
        //rps2中的数据与rps1中的数据完全不同

        //rps1中独有的数据
        mapList.put(0, rps1);
        //交集的数据
        mapList.put(1, rps1_bak);
        //rps2中的独有数据
        mapList.put(2, rps2);
        return mapList;
    }
}
